home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / DB_CLIPP / 0769B.ZIP / BASCSTAT.XTR < prev    next >
Text File  |  1987-03-01  |  5KB  |  238 lines

  1. *:*********************************************************************
  2. *:
  3. *:      Program: BASCSTAT.XTR
  4. *:
  5. *:       System: Basic Statistics Compilation System
  6. *:       Author: Lee Correll
  7. *:    Copyright (c) 1987, Lee Correll
  8. *:
  9. *:    Called by: BASCSTAT.PRG
  10. *:
  11. *:        Calls: FINDHI_C--procedure
  12. *:             : FINDHI_N--procedure
  13. *:
  14. *:         Uses: EXTRA.DBF
  15. *:             : XTRA1.DBF
  16. *:
  17. *: Documented: 3/1/87       1:01                   SNAP! version 1.72
  18. *:*********************************************************************
  19. PROCEDURE character
  20. SELECT 1
  21. DO findhi_c WITH fn,high
  22. ?"Counting Responses = 1"
  23. COUNT ALL FOR UPPER(&fn)="A" .OR. &fn="1" TO na
  24. ?"Counting Responses = 2"
  25. COUNT ALL FOR UPPER(&fn)="B" .OR. &fn="2" TO nb
  26. IF high >= 3 THEN 
  27.     ?"Counting Responses = 3"
  28.     COUNT ALL FOR UPPER(&fn)="C" .OR. &fn="3" TO nc
  29. ENDIF
  30. IF high >= 4 THEN
  31.     ?"Counting Responses = 4"
  32.     COUNT ALL FOR UPPER(&fn)="D" .OR. &fn="4" TO nd
  33. ENDIF
  34. IF high >= 5 THEN 
  35.     ?"Counting Responses = 5"
  36.     COUNT ALL FOR UPPER(&fn)="E" .OR. &fn="5" TO ne
  37. ENDIF
  38. IF high = 6 THEN
  39.     ?"Counting Responses = 6"
  40.     COUNT ALL FOR UPPER(&fn)="F" .OR. &fn="6" TO nf
  41. ENDIF
  42. RETURN
  43.  
  44. PROCEDURE numeric
  45. PRIVATE nz
  46. SELECT 1
  47. DO findhi_n WITH fn,high
  48. ?"Counting Responses = 1"
  49. COUNT ALL FOR &fn = 1 TO na
  50. ?"Counting Responses = 2"
  51. COUNT ALL FOR &fn = 2 TO nb
  52. IF high >= 3 THEN 
  53.     ?"Counting Responses = 3"
  54.     COUNT ALL FOR &fn = 3 TO nc
  55. ENDIF
  56. IF high >= 4 THEN
  57.     ?"Counting Responses = 4"
  58.     COUNT ALL FOR &fn = 4 TO nd
  59. ENDIF
  60. IF high >= 5 THEN 
  61.     ?"Counting Responses = 5"
  62.     COUNT ALL FOR &fn = 5 TO ne
  63. ENDIF
  64. IF high = 6 THEN
  65.     ?"Counting Responses = 6"
  66.     COUNT ALL FOR &fn = 6 TO nf
  67. ENDIF
  68. RETURN
  69.  
  70. PROCEDURE findhi_c
  71. PARAMETERS feild,hi
  72. high = " "
  73. hi   = 0
  74.  
  75. * Step one - determine if we are using numbers or letters
  76.  
  77. ?"Finding Maximum Value"
  78. GO TOP
  79. DO WHILE LEN(TRIM(&feild))=0
  80.     SKIP
  81. ENDDO
  82. y = &feild
  83. z = UPPER(y)        
  84. IF z >= "A" .AND. z <= "F" THEN
  85.     high  = "A"                  && using letters
  86. ELSE
  87.     high  = "1"                  && using numbers
  88. ENDIF
  89.  
  90. * Step two - find the highest one used 
  91.  
  92. GO TOP
  93. DO CASE
  94. CASE high = "A"
  95.     DO WHILE .NOT. EOF()
  96.         IF UPPER(&feild) > high THEN 
  97.             high = UPPER(&feild)
  98.         ENDIF
  99.         SKIP
  100.     ENDDO
  101.     hi = ASC(high)-ASC("A")+1
  102. CASE high = "1"
  103.     DO WHILE .NOT. EOF()
  104.         IF UPPER(&feild) > high THEN
  105.             high = UPPER(&feild)
  106.         ENDIF
  107.         SKIP
  108.     ENDDO
  109.     hi = ASC(high)-ASC("1")+1
  110. ENDCASE
  111. RETURN
  112.  
  113. PROCEDURE findhi_n
  114. PARAMETERS feild,hi
  115. hi   = 0
  116. ?"Finding Maximum Value"
  117. GO TOP
  118. DO WHILE .NOT. EOF()
  119.     IF &feild > hi THEN 
  120.         hi = &feild
  121.     ENDIF
  122.     SKIP
  123. ENDDO
  124. RETURN
  125.  
  126. PROCEDURE displine
  127. PARAMETERS line,letter,num1,num2,num3,num4
  128. @ line,04 SAY letter  
  129. @ line,19 SAY STR(num1,3,0)
  130. @ line,31 SAY STR((num1/num2)*100,5,2)    
  131. IF num4 = 100 THEN
  132.     @ line,43 SAY "Missing"
  133. ELSE
  134.     @ line,43 SAY STR((num1/num3)*100,5,2)    
  135.     num4 = num4 + ((num1/num3)*100)
  136. ENDIF
  137. @ line,56 SAY STR(num4,5,2)
  138. RETURN
  139.  
  140. PROCEDURE AVERAGE
  141. avg = na + nb * 2 + nc * 3 + nd * 4 + ne * 5 + nf * 6
  142. avg = avg / valid
  143. RETURN
  144.  
  145. PROCEDURE stdev
  146. SET DECIMALS TO 9
  147. SELECT 1
  148. GO TOP
  149. stddev = 0
  150. IF ft = "Character" THEN
  151.     DO WHILE .NOT. EOF()
  152.         IF VAL(&fn) <> 0 .AND. VAL(&fn) <= high THEN
  153.             stddev = stddev + (VAL(&fn)-avg)^2
  154.         ENDIF
  155.         SKIP + 1
  156.     ENDDO
  157. ELSE
  158.     DO WHILE .NOT. EOF()
  159.         IF &fn <> 0 .AND. &fn <= high THEN
  160.             stddev = stddev + ((&fn)-avg)^2
  161.         ENDIF
  162.         SKIP + 1
  163.     ENDDO
  164. ENDIF
  165. stddev = stddev / valid
  166. stddev = SQRT(stddev)
  167. SET DECIMALS TO 2
  168. SELECT 2
  169. RETURN
  170.  
  171. PROCEDURE median
  172. PRIVATE A
  173. SELECT 1
  174. COPY TO extra FIELDS &fn
  175. SORT TO xtra1 ON &fn     
  176. ERASE extra.dbf
  177. SELECT 3
  178. USE xtra1              
  179. * Step one - Even or Odd number of records
  180. DO CASE
  181. CASE valid/2 = INT(valid/2)    
  182.     A = valid/2
  183.     GO TOP
  184.     SKIP +A
  185.     IF ft = "Character" THEN
  186.         medn = VAL(&fn)
  187.     ELSE
  188.         medn = fn
  189.     ENDIF
  190.     SKIP +1
  191.     IF ft = "Character" THEN
  192.         medn = medn + VAL(&fn)
  193.     ELSE
  194.         medn = medn + fn
  195.     ENDIF              
  196.     medn = medn / 2
  197. CASE valid/2 <> INT(valid/2) 
  198.     A = INT(valid/2)+1
  199.     GO TOP
  200.     SKIP +A
  201.     IF ft = "Character" THEN
  202.         medn = VAL(&fn)
  203.     ELSE
  204.         medn = fn
  205.     ENDIF
  206. ENDCASE 
  207. USE
  208. ERASE xtra1.dbf
  209. SELECT 2
  210. RETURN
  211.  
  212. PROCEDURE mode1
  213. PRIVATE nz
  214. omde = 1
  215. nz   = na
  216. IF nb > na THEN
  217.     omde= 2
  218.     nz = nb
  219. ENDIF
  220. IF nc > nz THEN
  221.     omde= 3
  222.     nz = nc
  223. ENDIF
  224. IF nd > nz THEN
  225.     omde= 4
  226.     nz = nd
  227. ENDIF
  228. IF ne > nz THEN
  229.     omde= 5
  230.     nz = ne
  231. ENDIF
  232. IF nf > nz THEN
  233.     omde= 6
  234. ENDIF
  235. RETURN  
  236.  
  237. *: EOF: BASCSTAT.XTR
  238.